<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        
        <script>
            let number = 18;
            let person = {
                name:"张三",
                sex:'男'
            }

            Object.defineProperty(person,'age',{
                // value:18,
                // enumerable:true,//控制属性是否可以枚举，默认值是false
                // writable:true,//控制属性是否可以被修改，默认值是false
                // configurable:true,//控制属性是否可以被删除，默认值是false

                // 当有人读取person的age属性时，get函数(getter)就会被调用，且返回值就是age的值
                /* get:function(){
                    console.log('有人读取age属性了');
                    return number;
                }, */
                get(){
                    console.log('有人读取age属性了');
                    return number;
                },
                // 当有人修改person的age属性时，set函数(setter)就会被调用，且会收到修改的具体值
                /* set:function(value){
                    number = value;
                    console.log('有人修改了age属性，且值是'+ value);
                } */
                set(value){
                    number = value;
                    console.log('有人修改了age属性，且值是'+ value);
                }
            })

            /* 
                console.log(Object.keys(person));// 传入对象作为参数，可以把所有属性名提取出来变成一个数组
                // 通过Object.defineProperty创建的属性是不可枚举的   ['name', 'sex']
                for (const key in person) {
                    console.log(person[key]);// 张三  男
                } 
            */

            console.log(person);
        </script>
    </body>
</html>